package com.office.automate.dataaccess.def.user;

import java.util.List;
import java.util.Map;

import com.office.automate.exception.framework.FrontierVisibleException;
import com.office.automate.model.employee.Employee;
import com.office.automate.model.employee.EmployeeAttandanceCommit;
import com.office.automate.model.employee.EmployeeAttandanceQueryObject;
import com.office.automate.model.employee.EmployeeOverTime;
import com.office.automate.model.employee.EmployeeQualification;
import com.office.automate.model.employee.EmployeeSearch;
import com.office.automate.model.leave.LieuLeaveRequest;

public interface EmployeeDao {

	public void persistEmployeeDetails(Employee anEmployee) throws FrontierVisibleException;

	public void getNextEmployeeNumber(Employee anEmployee) throws FrontierVisibleException;

	public boolean isEmployeeExist(long anEmployeeNumber) throws FrontierVisibleException;

	public void persistEmployeeQualificationDetails(EmployeeQualification anEmployeeQualification) throws FrontierVisibleException;

	public void deleteQualification(EmployeeQualification anEmployeeQualification) throws FrontierVisibleException;

	public List<EmployeeQualification> getEmployeeQualificationPage(int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeQualificationDetailRecordCount() throws FrontierVisibleException;

	public List<Employee> getSearchResultPage(EmployeeSearch anEmployeeSearch, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeDetailRecordCount(EmployeeSearch aSearchCriteria) throws FrontierVisibleException;

	public void deleteEmployee(Employee anEmployee) throws FrontierVisibleException;

	public Employee getEmployeeDetails(long anEmployeeId) throws FrontierVisibleException;

	public void updateEmployee(Employee anUpdateEmployee) throws FrontierVisibleException;

	public List<EmployeeQualification> getEmployeeQualificationDetails(long anEmployeeId) throws FrontierVisibleException;

	public void uploadProfileImage(Employee updateEmployee) throws FrontierVisibleException;

	public String getEmployeeName(long anEmployeeNumber) throws FrontierVisibleException;

	public Map<String, Object> addEmployeeOTRequest(EmployeeOverTime employeeOverTime) throws FrontierVisibleException;

	public Map<String, Object> approveOTRequest(long aRequestId) throws FrontierVisibleException;

	public Map<String, Object> rejectOTRequest(long aRequestId) throws FrontierVisibleException;

	public Map<String, Object> cancelOTRequest(long aOTRequestId) throws FrontierVisibleException;

	public EmployeeOverTime getOTRequestDetails(long aOTRequestId) throws FrontierVisibleException;

	public int getAvailableEmployeeOverTimeRequestsRecordCount(Map<String, Object> aQueryCriterias) throws FrontierVisibleException;

	public List<EmployeeOverTime> getEmployeeOverTimeRequestsList(Map<String, Object> aQueryCriterias, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeOverTimeApprovalRequestRecordCount(long aCurrentLoginUserId) throws FrontierVisibleException;

	public List<EmployeeOverTime> getEmployeeOverTimeApprovalRequestsList(long aCurrentLoginUserId, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public void commitAttandanceDetails(EmployeeAttandanceCommit employeeAttandanceCommit) throws FrontierVisibleException;

	public List<EmployeeAttandanceCommit> getAttandanceDetails(EmployeeAttandanceQueryObject attandanceQuaryObject) throws FrontierVisibleException;

	public EmployeeAttandanceCommit getAttandanceDetails(LieuLeaveRequest aLieuLeaveRequest) throws FrontierVisibleException;

	public List<Employee> getAllEmployeeDetail() throws FrontierVisibleException;

	
}
